package libra.controller;

import java.util.Map;

import org.springframework.stereotype.Service;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;

@Service
public class SentinelService {
	/**
	 * 在Sentinel->流控规则->“链路”模式，下的被调用方法
	 * 将一个普通方法，通过@SentinelResource注解，定义为“资源”
	 * 注意：
	 * 	1、普通方法在Controller中使用@SentinelResource注解定义“资源无效”。需要定义在IOC容器的其他组件中，且有、无返回值不做要求。
	 * 	2、由于“资源”使用@SentinelResource注解，因此需要为其配置限流处理blockHandler，此时该方法需要为其定义返回值。
	 * 	3、使用“链路模式”需要在配置文件中，添加配置项spring.cloud.sentinel.web-context-unify=false。
	 */
	@SentinelResource(value="callRes", blockHandler = "callResBlock" )
	public Map<String, String> callRes( String from ) {
		return BuildResp.createResp( from + "_success");
	}
	public Map<String, String> callResBlock( String from, BlockException ex ) {
		return BuildResp.createResp( from + ".block" );
	}
}
